/**
 * [对数平均值](https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_logarithms)
 * 是一种适用于大或小乘积数组的几何平均值的等效计算方法。
 *
 * 它通过计算元素的对数平均值并取指数来得到。
 *
 * @param {Array<number>} x 包含一个或多个数据点的样本
 * @returns {number} 几何平均值
 * @throws {Error} 如果 x 为空
 * @throws {Error} 如果 x 包含负数
 */
function logAverage(x) {
    if (x.length === 0) {
        throw new Error("logAverage 需要至少一个数据点");
    }

    let value = 0;
    for (let i = 0; i < x.length; i++) {
        if (x[i] < 0) {
            throw new Error("logAverage 要求输入只能是非负数");
        }
        value += Math.log(x[i]);
    }

    return Math.exp(value / x.length);
}

export default logAverage;
